// 这个文件会打包packages下的模块，最终打包出js文件

// node dev.js （要打包的名字 -f 打包的格式） === argv.slice(2)
import minimist from 'minimist';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { createRequire } from 'module';
import esbuild from 'esbuild';


// node中的命令参数通过process来获取
const args = minimist(process.argv.slice(2));

// esm 使用commonjs 变量
const __filename = fileURLToPath(import.meta.url); // 获取文件的绝对路径 file: xxx
const __dirname = dirname(__filename);
const require = createRequire(import.meta.url);


const target = args._[0] || 'reactivity'; // 打包的模块名
const format = args.f || 'iife'; // 打包后的模块化规范

//  node中esm模块没有__dirname

// 入口文件  根据命令行提供的路径来进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`);
const pkg = require(`../packages/${target}/package.json`);

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry], // 入口文件
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 输出文件
    bundle: true, // reactivity -> shared 会打包到一起
    platform: 'browser',
    sourcemap: true,
    format, // cjs esm iife(立即执行函数)
    globalName: pkg.buildOptions?.name
}).then((ctx) => {
    console.log('打包成功', new Date().getHours() + ':' + new Date().getMinutes() + ':' + new Date().getSeconds());
    ctx.watch(); // 监控入口文件持续进行打包处理
})
